package com.kerbores.mongo.dao;

import java.util.List;

import com.kerbores.utils.web.pager.Pager;

public interface IMongoDao<T> {

	/**
	 * 增
	 * 
	 * @param t
	 * @return 保存成功与否
	 */
	public boolean save(T t);

	/**
	 * 删
	 * 
	 * @param t
	 * @return
	 */
	public int remove(T t);

	/**
	 * 根据id 删
	 * 
	 * @param id
	 * @return
	 */
	public int removeById(long id);

	/**
	 * 按条件 删
	 * 
	 * @param obj
	 *            条件描述
	 * @return
	 */
	public int removeByCnd(Object obj);

	/**
	 * 改
	 * 
	 * @param t
	 * @return
	 */
	public boolean update(T t);

	/**
	 * 根据id 改
	 * 
	 * @param id
	 * @param t
	 * @return
	 */
	public boolean updateById(long id, T t);

	/**
	 * 按条件 改
	 * 
	 * @param obj
	 *            条件描述
	 * @param t
	 * @return
	 */
	public int updateByCnd(Object obj, T t);

	/**
	 * 按条件改某些属性
	 * 
	 * @param obj
	 *            条件描述
	 * @param fieldDes
	 *            修改内容描述
	 * @return
	 */
	public int updateFieldByCnd(Object obj, Object fieldDes);

	/**
	 * 根据id改某些属性
	 * 
	 * @param id
	 * @param fieldDes
	 *            修改属性描述
	 * @return
	 */
	public int updateFieldById(long id, Object fieldDes);

	/**
	 * 统计
	 * 
	 * @return
	 */
	public long count();

	/**
	 * 按条件统计
	 * 
	 * @param obj
	 *            统计条件描述
	 * @return
	 */
	public long countByCnd(Object obj);

	/**
	 * 列表全部
	 * 
	 * @return
	 */
	public List<T> listAll();

	/**
	 * 按条件查询
	 * 
	 * @param obj
	 *            查询条件描述
	 * @return
	 */
	public List<T> findByCnd(Object obj);

	/**
	 * 查询满足条件的单个对象
	 * 
	 * @param obj
	 *            查询条件
	 * @return 满足条件的实体 如果没有满足条件的数据 返回null
	 */
	public T findOneByCnd(Object obj);

	/**
	 * 根据id查找
	 * 
	 * @param id
	 * @return
	 */
	public T findById(long id);

	/**
	 * 分页查询全部
	 * 
	 * @param pager
	 * @return
	 */
	public Pager listAllByPage(Pager pager);

	/**
	 * 分页条件查询
	 * 
	 * @param obj
	 *            查询条件
	 * @param pager
	 * @return
	 */
	public Pager findByPage(Object obj, Pager pager);
}
